package org.feifei.basic.config;

import org.feifei.basic.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

/**
 * 解决前后端分离跨域CORS问题
 */
@Configuration
public class MyConfig implements WebMvcConfigurer {


    @Resource
    private LoginInterceptor loginInterceptor;


    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 全局配置，表示所有方法都做跨域
//                .allowedOrigins("*") // 允许跨域的请求头
//                .allowedOrigins("http://127.0.0.1:8081") // 无法生效
//                .allowedOrigins("http://localhost:80")
//                .allowedOrigins("http://localhost")
//                .allowedOrigins("http://127.0.0.1")
//                .allowedOrigins("http://127.0.0.1:80")
                .allowedOrigins("http://localhost", "http://localhost:8081","http://bugtracker.itsource.cn", "http://bugtracker.itsource.cn:80")
                .allowedHeaders("*")    // 允许的请求头
                .allowCredentials(true)
                .allowedMethods("*"); // 允许通过的请求方法

    }


    /**
     * 配置登录放行资源
     * @param registry 登录配置注册表
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
                // 拦截所有请求
                .addPathPatterns("/**")
                // 配置放行请求
                .excludePathPatterns("/login/**")
                // 放行注册
                .excludePathPatterns("/user/register/**")
                // 放行图片资源
                .excludePathPatterns("/fastDfs")
                // 放行店铺注册
                .excludePathPatterns("/shop/settlement")
                // 放行验证码
                .excludePathPatterns("/verifycode/**")
                // 宠物发布和寻主
                .excludePathPatterns("/pet/**")
                // 放行接口文档
                .excludePathPatterns("/notify")
                .excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/doc.html");

    }

}
